package com.ff.xyh.serurity.security;

import com.ff.xyh.common.utils.JwtUtils;
import io.jsonwebtoken.Jwts;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * <p>
 * token管理
 * </p>
 *
 * @author qy
 * @since 2019-11-08
 */
@Component
@CacheConfig(cacheNames = {"AccessUserService"})
public class TokenManager {
    /** token过期时间 14天 */
    public static long tokenExpiration = 14 * JwtUtils.oneDay;
    /** 使用这些缓存注解 需要在类名上添加 cacheNames 注解指定命名空间 */
    // 将生成的token存入redis key为用户id
    @CachePut(unless = "#result == null or #result.isEmpty()", key = "#userId")
    public String createToken(String userId) {
        return JwtUtils.createJwtTokenWithUserId(userId, tokenExpiration);
    }

    public String getUserIdFromToken(String token) {
        return JwtUtils.getSubjectFromToken(token);
    }

    // 清除缓存
    @CacheEvict(key = "#userId" )
    public void removeToken(String token, String userId) {
        //token无需删除，客户端扔掉即可。
    }

}
